<html>
<head>
  <script src="OLLoader.js"></script>
  <script type="text/javascript">
    function test_Control_constructor(t) {
        t.plan(4);
    
        var control = new OpenLayers.Control();

        t.ok(control instanceof OpenLayers.Control, "new OpenLayers.Control returns object");
        t.eq(control.displayClass, "olControl", "displayClass set correctly");
        t.ok(control.id != null, "default id assigned to control");
        
        var testID = {};
        control = new OpenLayers.Control({ 'id': testID });
        t.ok(control.id == testID, "if id specified in options, no default assigned.");
    }

    function test_Control_addControl(t) {
        t.plan(2);
    
        var map = new OpenLayers.Map('map');
        var control = new OpenLayers.Control();
        map.addControl(control);

        t.ok(control.map === map, "Control.map is set to the map object" );
        t.ok(map.controls[map.controls.length - 1] === control, "map.controls contains control");
    }
    
    function test_Control_title(t) { 
        t.plan( 1 ); 
        var titleText = 'Title test'; 
        control = new OpenLayers.Control({title:titleText}); 
        t.eq( control.title, titleText, "control.title set correctly" ); 
    }
    
    function test_eventListeners(t) {
        t.plan(1);
        
        var method = OpenLayers.Events.prototype.on;
        // test that events.on is called at control construction
        var options = {
            eventListeners: {foo: "bar"}
        };
        OpenLayers.Events.prototype.on = function(obj) {
            t.eq(obj, options.eventListeners, "events.on called with eventListeners");
        }
        var control = new OpenLayers.Control(options);
        OpenLayers.Events.prototype.on = method;
        control.destroy();

        // if events.on is called again, this will fail due to an extra test
        // test control without eventListeners
        OpenLayers.Events.prototype.on = function(obj) {
            t.fail("events.on called without eventListeners");
        }
        var control2 = new OpenLayers.Control();
        OpenLayers.Events.prototype.on = method;
        control2.destroy();
    }

    function test_Control_destroy(t) {
        t.plan(4);
    
        var map = new OpenLayers.Map('map');
        var control = new OpenLayers.Control();
        map.addControl(control);

        control.destroy();
        t.ok(map.controls[map.controls.length - 1] != control, "map.controls doesn't contains control");

        t.ok(control.map == null, "Control.map is null");
        t.ok(control.div == null, "Control.div is null");
        t.ok(control.handler == null, "Control.handler is null");
    }
    
    function test_autoActivate(t) {
        
        t.plan(3);
        
        var control, map = new OpenLayers.Map("map");

        // confirm that a control is not activated by default
        control = new OpenLayers.Control();
        map.addControl(control);
        t.ok(!control.active, "control is not activated by default");
        
        // confirm that control is activated with autoActivate true
        control = new OpenLayers.Control({autoActivate: true});
        map.addControl(control);
        t.ok(control.active, "control is activated with autoActivate true");
       
        // confirm that control is not activated with autoActivate false
        control = new OpenLayers.Control({autoActivate: false});
        map.addControl(control);
        t.ok(!control.active, "control is not activated with autoActivate false");
        
        map.destroy();
        
    }

  </script>
</head>
<body>
    <div id="map" style="width: 1024px; height: 512px;"/>
</body>
</html>
